package com.bawei.lib_common.utils

import android.util.Log
import com.bawei.lib_net.datastore.DataStoreUtils
import com.bawei.lib_storage.mmkv.AuthMMKV
import com.bawei.lib_storage.room.HistoryManager
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch

/**
 * 历史记录调试工具类
 */
object HistoryDebugUtils {
    
    private const val TAG = "HistoryDebugUtils"
    
    /**
     * 调试历史记录功能
     */
    fun debugHistoryFeature() {
        Log.d(TAG, "开始调试历史记录功能...")
        
        // 1. 检查用户登录状态
        debugUserLoginStatus()
        
        // 2. 检查数据库状态
        debugDatabaseStatus()
        
        // 3. 测试添加历史记录
        testAddHistory()
        
        // 4. 测试查询历史记录
        testQueryHistory()
    }
    
    /**
     * 调试用户登录状态
     */
    private fun debugUserLoginStatus() {
        Log.d(TAG, "=== 调试用户登录状态 ===")
        
        // 检查AuthMMKV登录状态
        val hasLogin = AuthMMKV.hasLogin()
        Log.d(TAG, "AuthMMKV.hasLogin(): $hasLogin")
        
        // 检查DataStore中的用户信息
        val userJson = DataStoreUtils.getData("currentuser", "")
        Log.d(TAG, "DataStore用户信息: $userJson")
        
        // 获取用户ID
        val userId = UserUtils.getCurrentUserId()
        Log.d(TAG, "获取到的用户ID: '$userId'")
        
        // 检查用户是否已登录
        val isLoggedIn = UserUtils.isUserLoggedIn()
        Log.d(TAG, "用户是否已登录: $isLoggedIn")
        
        // 获取默认用户ID
        val defaultUserId = UserUtils.getDefaultUserId()
        Log.d(TAG, "默认用户ID: $defaultUserId")
    }
    
    /**
     * 调试数据库状态
     */
    private fun debugDatabaseStatus() {
        Log.d(TAG, "=== 调试数据库状态 ===")
        
        CoroutineScope(Dispatchers.IO).launch {
            try {
                // 获取所有历史记录
                val allHistory = HistoryManager.getHistoryList()
                Log.d(TAG, "数据库中所有历史记录数量: ${allHistory.size}")
                
                allHistory.forEach { history ->
                    Log.d(TAG, "历史记录: ID=${history.id}, 用户ID='${history.userId}', 标题='${history.title}'")
                }
                
                // 获取当前用户的历史记录
                val userId = UserUtils.getCurrentUserId().ifEmpty { UserUtils.getDefaultUserId() }
                val userHistory = HistoryManager.getHistoryListByUserId(userId)
                Log.d(TAG, "当前用户历史记录数量: ${userHistory.size}, 用户ID: '$userId'")
                
                userHistory.forEach { history ->
                    Log.d(TAG, "用户历史记录: ID=${history.id}, 标题='${history.title}'")
                }
                
            } catch (e: Exception) {
                Log.e(TAG, "调试数据库状态失败: ${e.message}", e)
            }
        }
    }
    
    /**
     * 测试添加历史记录
     */
    private fun testAddHistory() {
        Log.d(TAG, "=== 测试添加历史记录 ===")
        
        CoroutineScope(Dispatchers.IO).launch {
            try {
                val userId = UserUtils.getCurrentUserId().ifEmpty { UserUtils.getDefaultUserId() }
                Log.d(TAG, "使用用户ID添加历史记录: '$userId'")
                
                HistoryManager.addVideoHistory(
                    userId,
                    "调试测试视频_${System.currentTimeMillis()}",
                    "https://example.com/debug_image.jpg",
                    "这是一个调试测试视频的描述内容",
                    "https://example.com/debug_avatar.jpg",
                    "调试作者",
                    0,
                    lastPosition = 0L,
                    videoId = "debug_video_id",
                    videopath = "https://example.com/debug_video.mp4"
                )
                
                Log.d(TAG, "添加历史记录成功")
                
                // 验证是否添加成功
                val userHistory = HistoryManager.getHistoryListByUserId(userId)
                Log.d(TAG, "添加后用户历史记录数量: ${userHistory.size}")
                
            } catch (e: Exception) {
                Log.e(TAG, "测试添加历史记录失败: ${e.message}", e)
            }
        }
    }
    
    /**
     * 测试查询历史记录
     */
    fun testQueryHistory() {
        Log.d(TAG, "=== 测试查询历史记录 ===")
        CoroutineScope(Dispatchers.IO).launch {
            try {
                val userId = UserUtils.getCurrentUserId().ifEmpty { UserUtils.getDefaultUserId() }
                Log.d(TAG, "查询用户历史记录，用户ID: '$userId'")
                
                val historyList = HistoryManager.getHistoryListByUserId(userId)
                Log.d(TAG, "查询结果数量: ${historyList.size}")
                
                historyList.forEachIndexed { index, history ->
                    Log.d(TAG, "历史记录[$index]: ID=${history.id}, 标题='${history.title}', 作者='${history.authorName}'")
                }
                
            } catch (e: Exception) {
                Log.e(TAG, "测试查询历史记录失败: ${e.message}", e)
            }
        }
    }
    
    /**
     * 清空所有历史记录（用于测试）
     */
    fun clearAllHistory() {
        Log.d(TAG, "=== 清空所有历史记录 ===")
        
        CoroutineScope(Dispatchers.IO).launch {
            try {
                HistoryManager.clearAllHistory()
                Log.d(TAG, "清空所有历史记录成功")
            } catch (e: Exception) {
                Log.e(TAG, "清空历史记录失败: ${e.message}", e)
            }
        }
    }
    
    /**
     * 获取调试信息
     */
    fun getDebugInfo(): String {
        val userId = UserUtils.getCurrentUserId()
        val hasLogin = AuthMMKV.hasLogin()
        val userJson = DataStoreUtils.getData("currentuser", "")
        
        return """
            调试信息:
            - 用户ID: '$userId'
            - 是否登录: $hasLogin
            - 用户信息: $userJson
        """.trimIndent()
    }
} 